package com.turing.post.capitalaccounts.util;

import java.math.BigInteger;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 银行帐户信息数据访问接口
 * 
 * @author ZXL
 * 
 */
@Remote
@Local
public interface BankAccountDao {
	/**
	 * 根据主键获取BankAccount实例
	 * 
	 * @param bankAccountId
	 *            主键ID
	 * @return 银行帐户信息
	 */
	public BankAccount getBankAccountByBankAccountId(BigInteger bankAccountId);

	/**
	 * 条件查询银行账户信息记录数
	 * 
	 * @param bankName
	 *            开户行名称
	 * @param accountName
	 *            帐户名称
	 * @param accountNo
	 *            帐号
	 * @return 符合条件的记录数
	 */
	public BigInteger getBankAccountTotalByCondition(PCPSWebInput webInput,String bankName,
			String accountName, String accountNo,String bankType);

	/**
	 * 条件分页查询银行账户信息列表
	 * 
	 * @param bankName
	 *            开户行名称
	 * @param accountName
	 *            帐户名称
	 * @param accountNo
	 *            帐号
	 * @param pages
	 *            页数
	 * @return 银行账户信息列表
	 */
	public List<BankAccount> getBankAccountListByCondition(PCPSWebInput webInput,String bankName,
			String accountName, String accountNo,String bankType,Integer page);
	
	/**
	 * 根据用户查询付款人银行
	 * @param webInput
	 * @return
	 */
	public List<BankAccount> getBankAccountDropdown(PCPSWebInput webInput,String bankType);

	/**
	 * 新增银行帐户信息
	 * 
	 * @param bankAccount
	 *            银行帐户信息
	 */
	public void insertBankAccount(PCPSWebInput webInput,BankAccount bankAccount)
			throws PCPSApplicationException;

	/**
	 * 修改银行帐户信息
	 * 
	 * @param bankAccount
	 *            银行帐户信息
	 */
	public void updateBankAccount(PCPSWebInput webInput,BankAccount bankAccount)
			throws PCPSApplicationException;

	/**
	 * 删除银行帐户信息
	 * 
	 * @param bankAccountId
	 *            主键ID
	 */
	public void deleteBankAccountByBankAccountId(BigInteger bankAccountId)
			throws PCPSApplicationException;
	
	/**
	 * 根据帐号获取
	 * @param accountNo
	 * @return
	 */
	public List<BankAccount> getBankAccountByAccountNo(String accountNo);
	
	/**
	 * 根据发卡商号获取
	 * @param issueCompanyNo
	 * @return
	 */
	public List<BankAccount> getBankAccountByIssueCompanyNo(String issueCompanyNo);

}
